#include <stdio.h>

/***
 * 已知使用顺序存储的线性表
 *      写出结构体
 *      将线性表中值为x的元素放至末尾 时间O(n) 空间O(1)
 * */

typedef int DataType;
struct SeqList
{
    DataType *data;
    int length;
};

void moveElem(SeqList &L, DataType e)
{
    int index = 0;
    for (int i = 0; i < L.length; i++)
        if (L.data[i] != e)
            L.data[index++] = L.data[i];
    
    // 将值为e的元素放至最后(可能不止一个 需要循环)
    for (; index < L.length; index++)
        L.data[index] = e;
}

int main()
{
    SeqList L;
    int data[10] = {1, 2, 3, 3, 5, 6, 7, 8, 9};
    L.data = data;
    L.length = 9;

    for (int i = 0; i < L.length; i++)
    {
        printf("%d ", data[i]);
    }
    printf("\n");

    moveElem(L, 3);
    for (int i = 0; i < L.length; i++)
    {
        printf("%d ", data[i]);
    }
    printf("\n");

    return 0;
}